home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / Python 133 SRC / Mac / scripts / fullbuild.py < prev    next >
Text File  |  1996-05-19  |  3KB  |  137 lines

  1. #
  2. # fullbuild creates everything that needs to be created before a
  3. # distribution can be made, and puts it all in the right place.
  4. #
  5. # It expects the projects to be in the places where Jack likes them:
  6. # in directories named like 'build.macppc.shared'. That is fixable,
  7. # however.
  8. #
  9. # NOTE: You should proably make a copy of python with which to execute this
  10. # script, rebuilding running programs does not work...
  11.  
  12. import os
  13. import sys
  14. import macfs
  15. import MacOS
  16. import EasyDialogs
  17.  
  18. import addpack
  19. import aetools
  20. import AppleEvents
  21. from Metrowerks_Shell_Suite import Metrowerks_Shell_Suite
  22. from Required_Suite import Required_Suite 
  23.  
  24. addpack.addpack('Mac')
  25. addpack.addpack('scripts')
  26. import mkapplet
  27.  
  28. class MwShell(aetools.TalkTo, Metrowerks_Shell_Suite, Required_Suite):
  29.     pass
  30.  
  31. RUNNING=[]
  32.  
  33. def buildmwproject(top, creator, projects):
  34.     """Build projects with an MW compiler"""
  35.     if not creator in RUNNING:
  36.         print 'Please start project mgr with signature', creator,'-'
  37.         sys.stdin.readline()
  38.         RUNNING.append(creator)
  39.     try:
  40.         mgr = MwShell(creator)
  41.     except 'foo':
  42.         print 'Not handled:', creator
  43.         return
  44.     mgr.send_timeout = AppleEvents.kNoTimeOut
  45.     
  46.     for file in projects:
  47.         file = os.path.join(top, file)
  48.         fss = macfs.FSSpec(file)
  49.         print 'Building', file
  50.         mgr.open(fss)
  51.         try:
  52.             mgr.Make_Project()
  53.         except MacOS.Error, arg:
  54.             print '** Failed. Possible error:', arg
  55.         mgr.Close_Project()
  56. ##    mgr.quit()
  57.     
  58. def buildapplet(top, dummy, list):
  59.     """Create a PPC python applet"""
  60.     template = mkapplet.findtemplate()
  61.     for src in list:
  62.         if src[-3:] != '.py':
  63.             raise 'Should end in .py', src
  64.         base = os.path.basename(src)
  65.         dst = os.path.join(top, base)[:-3]
  66.         src = os.path.join(top, src)
  67.         try:
  68.             os.unlink(dst)
  69.         except os.error:
  70.             pass
  71.         print 'Building applet', dst
  72.         mkapplet.process(template, src, dst)
  73.  
  74. #
  75. # The build instructions. Entries are (routine, arg, list-of-files)
  76. # XXXX We could also include the builds for stdwin and such here...
  77. PPC_INSTRUCTIONS=[
  78.     (buildmwproject, "CWIE", [
  79.         ":build.macppc.shared:PythonCore.µ",
  80.         ":build.macppc.shared:PythonPPC.µ",
  81.         ":build.macppc.shared:PythonApplet.µ",
  82.     ])
  83. ]
  84. PLUGIN_INSTRUCTIONS=[
  85.     (buildmwproject, "CWIE", [
  86.         ":PlugIns:ctbmodule.µ",
  87.         ":PlugIns:imgmodules.µ",
  88.         ":PlugIns:macspeechmodule.µ",
  89.         ":PlugIns:mactcpmodules.µ",
  90.         ":PlugIns:stdwinmodule.µ",
  91.         ":PlugIns:toolboxmodules.µ",
  92.         ":PlugIns:wastemodule.µ",
  93.         ":PlugIns:_tkintermodule.µ",
  94.     ])
  95. ]
  96. M68K_INSTRUCTIONS=[
  97.     (buildmwproject, "CWIE", [
  98.         ":build.mac68k.stand:Python68K.µ",
  99.     ])
  100. ]
  101. APPLET_INSTRUCTIONS=[
  102.     (buildapplet, None, [
  103.         ":Mac:scripts:EditPythonPrefs.py",
  104.         ":Mac:scripts:mkapplet.py",
  105.         ":Mac:scripts:RunLibScript.py",
  106.         ":Mac:scripts:MkPluginAliases.py"
  107.     ])
  108. ]
  109.  
  110. ALLINST=[
  111.     ("PPC shared executable", PPC_INSTRUCTIONS),
  112.     ("PPC plugin modules", PLUGIN_INSTRUCTIONS),
  113.     ("68K executable", M68K_INSTRUCTIONS),
  114.     ("PPC applets", APPLET_INSTRUCTIONS)
  115. ]
  116.                 
  117. def main():
  118.     dir, ok = macfs.GetDirectory('Python source folder:')
  119.     if not ok:
  120.         sys.exit(0)
  121.     dir = dir.as_pathname()
  122.     INSTRUCTIONS = []
  123.     for string, inst in ALLINST:
  124.         answer = EasyDialogs.AskYesNoCancel("Build %s?"%string, 1)
  125.         if answer < 0:
  126.             sys.exit(0)
  127.         if answer:
  128.             INSTRUCTIONS = INSTRUCTIONS + inst
  129.     for routine, arg, list in INSTRUCTIONS:
  130.         routine(dir, arg, list)
  131.     print "All done!"
  132.     sys.exit(1)    
  133.     
  134. if __name__ == '__main__':
  135.     main()
  136.     
  137.